package com.qdl.rym.constants;

import com.qdl.rym.base.BaseEnum;

import java.util.HashMap;
import java.util.Map;

/**
 * @Description: BaseEnums
 * 基础枚举值
 * @Author: ChenXueLi
 * @Date: 2018-11-10 12:37
 */
public enum BaseEnums implements BaseEnum<String, String> {

    // 未登录
    NO_LOGIN(-999, "user_no_login","用户未登录或登录超时"),
    // 无权限操作
    NO_ACCESS_OPERATIONS(-1000, "operation.access.failure", "无权限操作"),
    // 请求成功
    SUCCESS(0, "request.success", "请求成功"),
    // 请求失败
    FAILURE(-1000, "request.failure", "请求失败"),
    // 操作成功
    OPERATION_SUCCESS(1, "operation.success", "操作成功"),
    // 操作失败
    OPERATION_FAILURE(-1001, "operation.failure", "操作失败"),
    // 系统异常
    ERROR(-1002, "system.error", "系统异常"),
    // 请求资源不存在
    FORBIDDEN(-1003, "forbidden", "无权限访问"),
    // 记录版本不存在或不匹配
    VERSION_NOT_MATCH(-1004, "record_not_exists_or_version_not_match", "记录版本不存在或不匹配"),
    // 参数不能为空
    PARAMETER_NOT_NULL(-1005, "parameter_not_be_null", "参数不能为空"),
    // 资源未找到404
    NOT_FOUND(-1006, "resources_not_found",  "资源未找到");

    // 返回状态码
    private int code;

    // 键值
    private String key;

    // 描述
    private String desc;

    private static Map<String, BaseEnum> allMap = new HashMap<>();

    BaseEnums(int code, String key, String desc) {
        this.code = code;
        this.key = key;
        this.desc = desc;
    }

    static {
        for(BaseEnums enums : BaseEnums.values()){
            allMap.put(enums.key, enums);
        }
    }

    /**
     * 获取返回信息
     *
     * @return
     */
    @Override
    public int code() {
        return this.code;
    }

    /**
     * 获取编码
     * @return 编码
     */
    @Override
    public String key() {
        return this.key;
    }

    /**
     * 获取描述
     * @return 描述
     */
    @Override
    public String desc() {
        return this.desc;
    }

    public String desc(String code) {
        return allMap.get(code).desc().toString();
    }
}
